package org.plantuml.idea.toolwindow;
import com.intellij.openapi.diagnostic.Logger;
import org.plantuml.idea.plantuml.PlantUml;
import org.plantuml.idea.rendering.*;
import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
public class AboutDialog extends JDialog {
Logger logger = Logger.getInstance(AboutDialog.class);
private JPanel contentPane;
private JButton buttonOK;
private JEditorPane aboutEditorPane;
private PlantUmlImageLabel testDot;
private Usage usage;
public AboutDialog() {
setTitle("PlantUML integration");
setContentPane(contentPane);
setModal(true);
getRootPane().setDefaultButton(buttonOK);
ok();
about();
testDot();
usage.setText(Usage.TEXT);
getRootPane().registerKeyboardAction(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AboutDialog.this.dispose();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
}
private void ok() {
buttonOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
onOK();
}
});
}
private void about() {
aboutEditorPane.setText("<html><body>PlantUML for Idea plugin</p><p>(c) Eugene Steinberg, 2012</p><p><a href=\"https://github.com/esteinberg/plantuml4idea\">PlantUML4idea on GitHub</a></p></body></html>");
aboutEditorPane.addHyperlinkListener(
new BrowseHyperlinkListener()
);
aboutEditorPane.setOpaque(false);
StyledDocument doc = (StyledDocument) aboutEditorPane.getDocument();
SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
doc.setParagraphAttributes(0, doc.getLength(), center, false);
}
private void onOK() {
// add your code here
dispose();
}
public static void main(String[] args) {
AboutDialog dialog = new AboutDialog();
dialog.pack();
dialog.setVisible(true);
System.exit(0);
}
private void testDot() {
RenderRequest renderRequest = new RenderRequest(new File(""), PlantUml.TESTDOT, PlantUml.ImageFormat.PNG, 0, 100, null, false, RenderCommand.Reason.REFRESH);
RenderResult result = PlantUmlRenderer.render(renderRequest, null);
try {
final ImageItem imageItem = result.getImageItem(0);
if (imageItem != null) {
testDot.setup(imageItem, 100, renderRequest);
testDot.setOpaque(false);
}
} catch (Exception e) {
logger.warn("Exception occurred rendering source = " + PlantUml.TESTDOT + ": " + e);
}
}
private void createUIComponents() {
usage = new Usage();
}
private class BrowseHyperlinkListener implements HyperlinkListener {
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(e.getURL().toURI());
} catch (IOException e1) {
logger.warn("Exception browsing to " + e.getURL().toExternalForm() + " : " + e1);
} catch (URISyntaxException e1) {
logger.warn("Incorrect URI syntax " + e.getURL().toExternalForm() + " : " + e1);
}
}
}
}
}
}